<?php
/**
 *	надеюсь, понятно, что можно применять как цепочки фильтров, так и перехваты буфера ?
 **/


if (! function_exists('_f') )
{
	function _f($callback,$str='',$stopflag=false)
	{
		if (empty($str))
		{
			$str = ob_get_contents();
			$stopflag = true;
		}

		if (!is_callable($callback) && is_string($callback) && is_readable($fn = FILTER_PATH.'/'.$callback.'.php'))
		{
			require_once($fn);
		}
		if (is_callable($callback))
			return call_user_func($callback,$str);
		elseif (!$stopflag)
			return _f($str,$callback,true);	//	попробуем наоборот
		else
			return $callback;
	}
}
if (! function_exists('_filter') )
{
	function _filter()
	{
		return call_user_func_array('_f',func_get_args());
	}
}



/*
if (! function_exists('_f') )
{
	function _f($str,$callback=null)
	{
		if (is_null($callback))
		{
			$callback = $str;
			$str = ob_get_contents();
		}
		if (!is_callable($callback) && is_readable($fn = FILTER_PATH.'/'.$callback.'.php'))
		{
			require_once($fn);
		}
		if (is_callable($callback))
			$str = call_user_func($callback,$str);

		return $str;
	}
}
if (! function_exists('_filter') )
{
	function _filter()
	{
		return call_user_func_array('_f',func_get_args());
	}
}

*/
/**
 *	обратный порядок аргументов
 **/
/*
if (! function_exists('f_') )
{
	function f_($callback,$str=null)
	{
		if (is_null($str))
			$str = ob_get_contents();

		if (!is_callable($callback) && is_readable($fn = FILTER_PATH.'/'.$callback.'.php'))
		{
			require_once($fn);
		}
		if (is_callable($callback))
			$str = call_user_func($callback,$str);

		return $str;
	}
}
if (! function_exists('filter_') )
{
	function filter_()
	{
		return call_user_func_array('f_',func_get_args());
	}
}
*/
?>